﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Gacn.ControleAlunos.Library.Business;
using Gacn.ControleAlunos.Library.Entities;
using System.Text;

namespace Gacn.ControleAlunos.WebApplication
{
    public partial class EditarAluno : System.Web.UI.Page
    {
        public static AlunoDetalhadoEntity aluno = new AlunoDetalhadoEntity();

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                txtResultado.Visible = false;
                InicializaCboTurma();
                aluno = AlunoBiz.GetAlunoDetalhadoPorAlunoID(int.Parse(Request.QueryString["AlunoID"]));
                PopulaDadosDoAlunoNaTela(aluno);
            }
            catch (Exception ex)
            {
                StringBuilder sb = new StringBuilder();

                sb.AppendLine("Houve falha na inserção dos dados.");
                sb.AppendLine("\n");
                sb.AppendLine(ex.Message);
                sb.AppendLine(ex.StackTrace);
                sb.AppendLine(ex.Data.ToString());

                txtResultado.Visible = true;
                txtResultado.Text = sb.ToString();
            }
        }

        private void InicializaCboTurma()
        {
            List<TurmaEntity> turmas = TurmaBiz.GetAllTurmaEntity();
            foreach (TurmaEntity t in turmas)
                cboTurma.Items.Add(new ListItem(t.CodTurma, t.ID.ToString()));
        }

        private void PopulaDadosDoAlunoNaTela(AlunoDetalhadoEntity aluno)
        {
            
            alunoIdade.Text = (DateTime.Today - aluno.Nascimento) + "";

            if (aluno.Sexo.Equals(char.Parse("F")))
                cboSexo.SelectedIndex = 1;
            else if (aluno.Sexo.Equals(char.Parse("M")))
                cboSexo.SelectedIndex = 0;

            for (int i = 0; i < cboTurma.Items.Count; i++)
                if (cboTurma.Items[i].Value.Equals(aluno.TurmaID.ToString()))
                    cboTurma.SelectedIndex = i;

            if (aluno.RA.HasValue)
                alunoRA.Text = string.Format("", aluno.RA.Value);

            if (aluno.NumeroSapato.HasValue)
                alunoSapato.Text = string.Format("{0:0}", aluno.NumeroSapato.Value);

            if (aluno.Telefone.HasValue)
                telAluno1.Text = string.Format("{0:0}", aluno.Telefone.Value);

            if (aluno.Telefone2.HasValue)
                telAluno2.Text = string.Format("{0:0}", aluno.Telefone2.Value);


            alunoCalca.Text = aluno.RoupaBaixo;
            alunoCamisa.Text = aluno.RoupaCima;
            alunoNomeCompleto.Text = aluno.NomePessoa;
            alunoObs.Text = aluno.Observacao;
            alunoSerie.Text = aluno.Serie;

        }

        protected void Atualizar_Click(object sender, EventArgs e)
        {
            PessoaDetalhadaEntity pessoa = ValidaDadosDaTela();

            if (pessoa != null)
            {
                try
                {
                    InsereNoBanco(pessoa);
                    RedirecionaParaPesquisa();
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();

                    sb.AppendLine("Houve falha na inserção dos dados.");
                    sb.AppendLine("\n");
                    sb.AppendLine(ex.Message);
                    sb.AppendLine(ex.StackTrace);
                    sb.AppendLine(ex.Data.ToString());

                    txtResultado.Visible = true;
                    txtResultado.Text = sb.ToString();
                }
            }
        }

        private void RedirecionaParaPesquisa()
        {
            Response.Redirect("/aluno/AlterarDadosSimples.aspx?Resultado=Sucesso");
        }

        private void InsereNoBanco(PessoaDetalhadaEntity pessoa)
        {
            PessoaBiz.CadastraPessoa(pessoa);
            if (pessoa.ID > 0)
            {
                AlunoBiz.UpdateAlunoDetalhado(aluno);
                RedirecionaParaPesquisa();
            }
        }

        private PessoaDetalhadaEntity ValidaDadosDaTela()
        {
            txtResultado.Text = "";

            if (alunoNomeCompleto.Text.Equals("") ||
                cboTurma.SelectedIndex.Equals(0) ||
                cboSexo.SelectedIndex.Equals(0))
            {
                txtResultado.Text = "Verifique se os dados obrigatórios estão preenchidos.";
                txtResultado.Visible = true;
                return null;
            }
            try
            {
                PessoaDetalhadaEntity pessoa = new PessoaDetalhadaEntity();
                if (!alunoIdade.Text.Equals(""))
                    pessoa.Nascimento = DateTime.Today -
                        new TimeSpan(int.Parse(alunoIdade.Text.ToString()) * 365, 0, 0, 0);

                if (!telAluno1.Text.Equals(""))
                    pessoa.Telefone = double.Parse(telAluno1.Text);
                if (!telAluno2.Text.Equals(""))
                    pessoa.Telefone2 = double.Parse(telAluno2.Text);
                if (!alunoRA.Text.Equals(""))
                    pessoa.RA = double.Parse(alunoRA.Text);
                if (!alunoSapato.Text.Equals(""))
                    pessoa.NumeroSapato = int.Parse(alunoSapato.Text);

                pessoa.Serie = alunoSerie.Text;
                pessoa.RoupaBaixo = alunoCalca.Text;
                pessoa.RoupaCima = alunoCamisa.Text;
                pessoa.NomePessoa = alunoNomeCompleto.Text;
                pessoa.Observacao = alunoObs.Text;
                pessoa.Sexo = char.Parse(cboSexo.SelectedValue);
                pessoa.TipoPessoaId = 1;
                pessoa.Ativo = true;

                return pessoa;
            }
            catch (Exception ex)
            {
                StringBuilder sb = new StringBuilder();

                sb.AppendLine("Houve falha na validação dos dados. Verifique abaixo a formatação correta:");
                sb.AppendLine("- Sapato, Idade, RA e Telefones: Apenas números");
                sb.AppendLine("\n");
                sb.AppendLine(ex.Message);
                sb.AppendLine(ex.StackTrace);
                sb.AppendLine(ex.Data.ToString());

                txtResultado.Visible = true;
                txtResultado.Text = sb.ToString();
                return null;
            }
        }

    }
}